home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / ncurses / tic.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-21  |  11.9 KB  |  333 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.              *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
  31.  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
  32.  *     and: Thomas E. Dickey 1996 on                                        *
  33.  ****************************************************************************/
  34.  
  35. /*
  36.  * $Id: tic.h,v 1.62 2007/08/11 16:12:43 tom Exp $
  37.  *    tic.h - Global variables and structures for the terminfo
  38.  *            compiler.
  39.  */
  40.  
  41. #ifndef __TIC_H
  42. #define __TIC_H
  43.  
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47.  
  48. #include <curses.h>    /* for the _tracef() prototype, ERR/OK, bool defs */
  49.  
  50. /*
  51. ** The format of compiled terminfo files is as follows:
  52. **
  53. **        Header (12 bytes), containing information given below
  54. **        Names Section, containing the names of the terminal
  55. **        Boolean Section, containing the values of all of the
  56. **                boolean capabilities
  57. **                A null byte may be inserted here to make
  58. **                sure that the Number Section begins on an
  59. **                even word boundary.
  60. **        Number Section, containing the values of all of the numeric
  61. **                capabilities, each as a short integer
  62. **        String Section, containing short integer offsets into the
  63. **                String Table, one per string capability
  64. **        String Table, containing the actual characters of the string
  65. **                capabilities.
  66. **
  67. **    NOTE that all short integers in the file are stored using VAX/PDP-style
  68. **    byte-order, i.e., least-significant byte first.
  69. **
  70. **    There is no structure definition here because it would only confuse
  71. **    matters.  Terminfo format is a raw byte layout, not a structure
  72. **    dump.  If you happen to be on a little-endian machine with 16-bit
  73. **    shorts that requires no padding between short members in a struct,
  74. **    then there is a natural C structure that captures the header, but
  75. **    not very helpfully.
  76. */
  77.  
  78. #define MAGIC        0432    /* first two bytes of a compiled entry */
  79.  
  80. #undef  BYTE
  81. #define BYTE(p,n)    (unsigned char)((p)[n])
  82.  
  83. #define IS_NEG1(p)    ((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377))
  84. #define IS_NEG2(p)    ((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377))
  85. #define LOW_MSB(p)    (BYTE(p,0) + 256*BYTE(p,1))
  86.  
  87. #define IS_TIC_MAGIC(p)    (LOW_MSB(p) == MAGIC)
  88.  
  89. /*
  90.  * The "maximum" here is misleading; XSI guarantees minimum values, which a
  91.  * given implementation may exceed.
  92.  */
  93. #define MAX_NAME_SIZE    512    /* maximum legal name field size (XSI:127) */
  94. #define MAX_ENTRY_SIZE    4096    /* maximum legal entry size */
  95.  
  96. /*
  97.  * The maximum size of individual name or alias is guaranteed in XSI to be at
  98.  * least 14, since that corresponds to the older filename lengths.  Newer
  99.  * systems allow longer aliases, though not many terminal descriptions are
  100.  * written to use them.  The MAX_ALIAS symbol is used for warnings.
  101.  */
  102. #if HAVE_LONG_FILE_NAMES
  103. #define MAX_ALIAS    32    /* smaller than POSIX minimum for PATH_MAX */
  104. #else
  105. #define MAX_ALIAS    14    /* SVr3 filename length */
  106. #endif
  107.  
  108. /* location of user's personal info directory */
  109. #define PRIVATE_INFO    "%s/.terminfo"    /* plug getenv("HOME") into %s */
  110.  
  111. /*
  112.  * Some traces are designed to be used via tic's verbose option (and similar in
  113.  * infocmp and toe) rather than the 'trace()' function.  So we use the bits
  114.  * above the normal trace() parameter as a debug-level.
  115.  */
  116.  
  117. #define MAX_DEBUG_LEVEL 15
  118. #define DEBUG_LEVEL(n)    ((n) << TRACE_SHIFT)
  119.  
  120. #define set_trace_level(n) \
  121.     _nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \
  122.     _nc_tracing |= DEBUG_LEVEL(n)
  123.  
  124. #ifdef TRACE
  125. #define DEBUG(n, a)    if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a
  126. #else
  127. #define DEBUG(n, a)    /*nothing*/
  128. #endif
  129.  
  130. extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
  131. extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2);
  132. extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
  133. extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
  134.  
  135. /*
  136.  * These are the types of tokens returned by the scanner.  The first
  137.  * three are also used in the hash table of capability names.  The scanner
  138.  * returns one of these values after loading the specifics into the global
  139.  * structure curr_token.
  140.  */
  141.  
  142. #define BOOLEAN 0        /* Boolean capability */
  143. #define NUMBER 1        /* Numeric capability */
  144. #define STRING 2        /* String-valued capability */
  145. #define CANCEL 3        /* Capability to be cancelled in following tc's */
  146. #define NAMES  4        /* The names for a terminal type */
  147. #define UNDEF  5        /* Undefined */
  148.  
  149. #define NO_PUSHBACK    -1    /* used in pushtype to indicate no pushback */
  150.  
  151.     /*
  152.      *    The global structure in which the specific parts of a
  153.      *    scanned token are returned.
  154.      *
  155.      */
  156.  
  157. struct token
  158. {
  159.     char    *tk_name;        /* name of capability */
  160.     int    tk_valnumber;    /* value of capability (if a number) */
  161.     char    *tk_valstring;    /* value of capability (if a string) */
  162. };
  163.  
  164. extern NCURSES_EXPORT_VAR(struct token)    _nc_curr_token;
  165.  
  166.     /*
  167.      * Offsets to string capabilities, with the corresponding functionkey
  168.      * codes.
  169.      */
  170. struct tinfo_fkeys {
  171.     unsigned offset;
  172.     chtype code;
  173.     };
  174.  
  175. #if    BROKEN_LINKER
  176.  
  177. #define    _nc_tinfo_fkeys    _nc_tinfo_fkeysf()
  178. extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void);
  179.  
  180. #else
  181.  
  182. extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[];
  183.  
  184. #endif
  185.  
  186.     /*
  187.      * The file comp_captab.c contains an array of these structures, one
  188.      * per possible capability.  These are indexed by a hash table array of
  189.      * pointers to the same structures for use by the parser.
  190.      */
  191.  
  192. struct name_table_entry
  193. {
  194.     const char *nte_name;    /* name to hash on */
  195.     int    nte_type;    /* BOOLEAN, NUMBER or STRING */
  196.     short    nte_index;    /* index of associated variable in its array */
  197.     short    nte_link;    /* index in table of next hash, or -1 */
  198. };
  199.  
  200. struct alias
  201. {
  202.     const char    *from;
  203.     const char    *to;
  204.     const char    *source;
  205. };
  206.  
  207. extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
  208. extern NCURSES_EXPORT(const short *) _nc_get_hash_table (bool);
  209. extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool);
  210.  
  211. #define NOTFOUND    ((struct name_table_entry *) 0)
  212.  
  213. /* out-of-band values for representing absent capabilities */
  214. #define ABSENT_BOOLEAN        ((signed char)-1)    /* 255 */
  215. #define ABSENT_NUMERIC        (-1)
  216. #define ABSENT_STRING        (char *)0
  217.  
  218. /* out-of-band values for representing cancels */
  219. #define CANCELLED_BOOLEAN    ((signed char)-2)    /* 254 */
  220. #define CANCELLED_NUMERIC    (-2)
  221. #define CANCELLED_STRING    (char *)(-1)
  222.  
  223. #define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */
  224. #define VALID_NUMERIC(s) ((s) >= 0)
  225. #define VALID_STRING(s)  ((s) != CANCELLED_STRING && (s) != ABSENT_STRING)
  226.  
  227. /* termcap entries longer than this may break old binaries */
  228. #define MAX_TERMCAP_LENGTH    1023
  229.  
  230. /* this is a documented limitation of terminfo */
  231. #define MAX_TERMINFO_LENGTH    4096
  232.  
  233. #ifndef TERMINFO
  234. #define TERMINFO "/usr/share/terminfo"
  235. #endif
  236.  
  237. /* access.c */
  238. extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *);
  239. extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *);
  240. extern NCURSES_EXPORT(bool) _nc_is_dir_path (const char *);
  241. extern NCURSES_EXPORT(bool) _nc_is_file_path (const char *);
  242. extern NCURSES_EXPORT(char *) _nc_basename (char *);
  243. extern NCURSES_EXPORT(char *) _nc_rootname (char *);
  244.  
  245. /* comp_hash.c: name lookup */
  246. extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
  247.     (const char *, const short *);
  248. extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
  249.     (const char *, int, const struct name_table_entry *);
  250.  
  251. /* comp_scan.c: lexical analysis */
  252. extern NCURSES_EXPORT(int)  _nc_get_token (bool);
  253. extern NCURSES_EXPORT(void) _nc_panic_mode (char);
  254. extern NCURSES_EXPORT(void) _nc_push_token (int);
  255. extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *);
  256. extern NCURSES_EXPORT_VAR(int) _nc_curr_col;
  257. extern NCURSES_EXPORT_VAR(int) _nc_curr_line;
  258. extern NCURSES_EXPORT_VAR(int) _nc_syntax;
  259. extern NCURSES_EXPORT_VAR(long) _nc_comment_end;
  260. extern NCURSES_EXPORT_VAR(long) _nc_comment_start;
  261. extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos;
  262. extern NCURSES_EXPORT_VAR(long) _nc_start_line;
  263. #define SYN_TERMINFO    0
  264. #define SYN_TERMCAP    1
  265.  
  266. /* comp_error.c: warning & abort messages */
  267. extern NCURSES_EXPORT(const char *) _nc_get_source (void);
  268. extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
  269. extern NCURSES_EXPORT(void) _nc_get_type (char *name);
  270. extern NCURSES_EXPORT(void) _nc_set_source (const char *const);
  271. extern NCURSES_EXPORT(void) _nc_set_type (const char *const);
  272. extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
  273. extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2);
  274. extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings;
  275.  
  276. /* comp_expand.c: expand string into readable form */
  277. extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int);
  278.  
  279. /* comp_scan.c: decode string from readable form */
  280. extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *);
  281.  
  282. /* captoinfo.c: capability conversion */
  283. extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const);
  284. extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const);
  285.  
  286. /* home_terminfo.c */
  287. extern NCURSES_EXPORT(char *) _nc_home_terminfo (void);
  288.  
  289. /* lib_tparm.c */
  290. #define NUM_PARM 9
  291.  
  292. extern NCURSES_EXPORT_VAR(int) _nc_tparm_err;
  293.  
  294. extern NCURSES_EXPORT(int) _nc_tparm_analyze(const char *, char **, int *);
  295.  
  296. /* lib_tputs.c */
  297. extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;        /* Add one for every null sent */
  298.  
  299. /* comp_main.c: compiler main */
  300. extern const char * _nc_progname;
  301.  
  302. /* db_iterator.c */
  303. typedef enum {
  304.     dbdTIC = 0,
  305. #if USE_DATABASE
  306.     dbdEnvOnce,
  307.     dbdHome,
  308.     dbdEnvList,
  309.     dbdCfgList,
  310.     dbdCfgOnce,
  311. #endif
  312. #if USE_TERMCAP
  313.     dbdEnvOnce2,
  314.     dbdEnvList2,
  315.     dbdCfgList2,
  316. #endif
  317.     dbdLAST
  318. } DBDIRS;
  319.  
  320. extern NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS *, int *);
  321. extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *);
  322. extern NCURSES_EXPORT(void) _nc_first_db(DBDIRS *, int *);
  323. extern NCURSES_EXPORT(void) _nc_last_db(void);
  324.  
  325. /* write_entry.c */
  326. extern NCURSES_EXPORT(int) _nc_tic_written (void);
  327.  
  328. #ifdef __cplusplus
  329. }
  330. #endif
  331.  
  332. #endif /* __TIC_H */
  333.